package com.atguigu.minio;

import com.atguigu.minio.bean.Emp;
import com.atguigu.minio.mapper.EmpMapper;
import com.atguigu.minio.mapper.UserMapper;
import com.atguigu.minio.service.UserService;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/*
    依赖冲突：
         mvn的依赖传递 + 自动解决依赖冲突(路径短优先 先声明优先)
         > mvn排除依赖时 排除了项目需要使用的版本，导致项目运行期间需要从jar包中找需要的版本的类或者方法

         springboot: 3.0.5 + springcloud
            企业开发使用的springboot一般还是2.x，新项目使用3.0
 */
@SpringBootTest
public class MpTest2 {

    @Resource
    EmpMapper empMapper;

    @Resource
    UserService userService;
    /*
        UserServiceImpl: 生成CRUD的方法的原理：
            1、容器初始化UserServiceImpl对象时 在他的父类中根据泛型UserMapper自动装配了Mapper
                    UserMapper baseMapper;
            2、调用UserServiceImpl的CRUD方法时：
                    最终都是调用UserMapper的方法来实现
     */

    @Test
    void test3(){
        System.out.println(userService.getById(1828317323995926530L));
        // 有id表示更新，没有id表示新增
//        userService.saveOrUpdate();
//        userService.page()
//        userService.list()

    }






    /*
               带条件的分页查询：
                   1、带条件查询记录条数
                       select count(1) from emp where .....
                  2、带条件查询分页数据


                  springboot整合mybatis-spring，可以使用MapperScan注解指定包扫描所有的Mappe接口创建对象注入到容器中
            */
    @Test
    void test1(){

        Page<Emp> page = empMapper.selectPage(new Page<Emp>(1, 3), Wrappers.lambdaQuery(Emp.class)
                //great than
                .gt(Emp::getEmpSalary, 20000)
                // less than equals
                .le(Emp::getEmpId, 10));

        page.getRecords().forEach(System.out::println);

    }
    /*
        mp自定义sql： 多表联查

            查询月薪在 20000~50000之间的员工信息
     */
    @Test
    void test2(){
//        List<Emp> emps = empMapper.selectBetweenSalary(20000,50000);
        QueryWrapper<Emp> queryWrapper = Wrappers.query();
        queryWrapper.le("emp_salary" , 50000);
        queryWrapper.ge("emp_salary" , 20000);
        queryWrapper.orderByDesc("emp_salary");

//        List<Emp> emps = empMapper.selectBetweenSalaryByQueryWrapper(queryWrapper);

        //自定义 带条件查询分页数据：
        Page<Emp> page = new Page<>(2, 3);
        // mapper查询的结果集仍然通过mybatis解析封装，返回结果表示 查询结果集每一行要封装的类型，多条记录通过集合存储
        List<Emp> emps = empMapper.selectPageBetweenSalaryByQueryWrapper(page,queryWrapper);
        //组装分页数据
        page.setRecords(emps);

        System.out.println("page.getPages() = " + page.getPages());
        System.out.println("page.getTotal() = " + page.getTotal());
        page.getRecords().forEach(System.out::println);
    }

}
